package cn.edu.jxust.core.domain.repository;

import cn.edu.jxust.common.domain.entity.Site;
import cn.edu.jxust.common.domain.dto.DeviceSiteVo;
import cn.edu.jxust.common.domain.dto.SiteAirTypeVo;
import cn.edu.jxust.common.domain.valobj.SiteAirTypeVoSimple;
import cn.edu.jxust.common.domain.dto.SiteVo;
import cn.edu.jxust.common.response.Result;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Map;

/**
 * @author QiuKangming
 * @since 2020-07-06
 */
public interface SiteService extends IService<Site> {

    /**
     * 添加监测点信息
     * @param siteVo 监测点视图对象
     * @return boolean
     */
    boolean addSite(SiteVo siteVo);

    /**
     * 修改监测点信息
     * @param siteVo 监测点视图对象
     * @return Result
     */
    Result modifySiteInfo(SiteVo siteVo);

    /**
     * 根据 id 获取监测点信息
     * @param id 监测点id
     * @return Site
     */
    Site getSiteById(Integer id);

    /**
     * @param paramMap 请求参数
     * @param page 页数
     * @param size 一页几条数据
     * @return IPage<Site>
     */
    IPage<SiteVo> getSitePage(Map<String, String[]> paramMap, Integer page, Integer size);

    /**
     * 获取未绑定设备的监测点列表
     * @param page 第几页
     * @param size 一页几条数据
     * @return IPage<Site>
     */
    IPage<Site> getNoBindingSite(Integer page, Integer size);

    /**
     * 根据id判断监测点是否绑定监测设备
     * @param id 监测点id
     * @return boolean
     */
    boolean siteIsBinding(Integer id);

    /**
     * 监测点绑定设备
     * @param deviceSiteVo 设备视图对象
     * @return boolean
     */
    boolean bindingDevice(DeviceSiteVo deviceSiteVo);

    /**
     * 根据监测点id获取监测气体列表
     * @param page 第几页
     * @param size 一页几条数据
     * @param siteId 监测点id
     * @return IPage<SiteAirTypeVo>
     */
    IPage<SiteAirTypeVo> getSiteAirTypeVoListBySiteId(Integer page, Integer size, Integer siteId);

    /**
     * 监测点删除或添加监测气体
     * @param siteAirTypeVo 监测点监测气体视图对象
     * @return Result
     */
    Result addOrdelSiteAirType(SiteAirTypeVo siteAirTypeVo);

    /**
     * 根据设备id查询监测点的监测气体列表
     * @param deviceId 设备id
     * @return List<SiteAirTypeVo>
     */
    List<SiteAirTypeVoSimple> getSiteAirTypeByDeviceId(Integer deviceId);

    /**
     * 根据id删除监测点
     * @param id 监测点id号
     * @return Result
     */
    Result delSiteById(Integer id);

    /**
     * 根据区域id查询该区域的监测点id列表
     * @param areaId 区域id
     * @return List<Integer>
     */
    List<Integer> getSiteIdsByAreaId(Integer areaId);

    /**
     * 根据区域id和企业id获取该企业的监测点id列表
     * @param areaId 区域id
     * @param enterpriseId 企业id
     * @return List<Integer>
     */
    List<Integer> getSiteIdsByAreaIdAndEnterpriseId(Integer areaId, Integer enterpriseId);

    /**
     * 根据 区域id和企业id查询该企业下的监测点个数
     * @param areaId 区域id
     * @param enterpriseId 企业id
     * @return int
     */
    int checkSiteCountByAreaIdAndEnterpriseId(Integer areaId, Integer enterpriseId);

}
